package net.zjitc.logincheckcode.web;

import net.zjitc.logincheckcode.dao.UserDao;
import net.zjitc.logincheckcode.dao.UserDaoImpl;
import net.zjitc.logincheckcode.domain.User;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * @Author Administrator
 * @Date 2020/6/4 16:37
 **/
@WebServlet("/login")
public class Login extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /* 1、设置请求编码
        *  2、获取请求参数
        *  3、比较验证码是否一致：
        *     请求参数中获取的验证码，图片中的验证码（session）
        *     若不一致，保存错误信息，转发到jsp
        *     若一致，比较用户名和密码是否一致，
        *           若不一致，保存错误信息，转发到jsp
        *           若一致，保存用户信息，重定向到另一页面
        *   */
        request.setCharacterEncoding("utf-8");
        /*获取用户输入的验证码（请求参数），传入的参数是html/jsp页面中name值*/
        String checkcode = request.getParameter("checkcode");
        /* 获取session中保存的验证码*/
        HttpSession session = request.getSession();
        String session_code = (String) session.getAttribute("session_code");
        /* 比较验证码是否一致(忽略大小写)*/
        if(checkcode.equalsIgnoreCase(session_code)){
            /* 验证码一致:
            *  1）获取用户输入的用户名和密码 （请求参数）
            *  2）调用dao层方法，判断用户输入的用户名密码与数据库中保存的是否一致
            *   根据返回值，若返回的是空，表示不一致：将错误信息保存在request域，转发到登录页面
            *   若一致，把用户信息保存在session域，重定向到另一页面*/
          /*  System.out.println("验证码一致，接下来比较用户名和密码是否一致");*/
            String name = request.getParameter("name");
            String password = request.getParameter("password");
            UserDao dao=new UserDaoImpl();
            User login = dao.login(name, password);
            if(login==null){
                /* 用户名密码错误*/
                request.setAttribute("error_login","用户名或密码错误");
                request.getRequestDispatcher("/logincheckcode.jsp").forward(request,response);
            }else{
                /*用户名密码正确*/
                request.getSession().setAttribute("user",login);
                /*重定向的路径：需要加上项目路径*/
                String contextPath = request.getContextPath();
                response.sendRedirect(contextPath+"/a.jsp");
            }
        }else{
            /*验证码不一致：
            *  1）错误信息保存request域
            *  2）转发到登陆页面（页面上去获取request域中的内容，展示出来）*/
            request.setAttribute("error_login","验证码错误");
            request.getRequestDispatcher("/logincheckcode.jsp").forward(request,response);
        }
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}
